package cn.xzqwjw.taskmanager.common.validator;

import org.springframework.http.HttpMethod;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Objects;

/**
 * @author rush
 */
public class HttpMethodValidatorClass implements ConstraintValidator<HttpMethodValidator, Object> {

  // HttpMethodValidator 注解规定的那些有效值
  // private String values;

  @Override
  public void initialize(HttpMethodValidator validator) {
    // 初始化数据，如果有需要初始化的在此操作，没有则不需操作此函数
    // this.values = validator.values();
  }

  /**
   * 用户输入的值，必须是 @HttpMethodValidator 注解规定的那些值其中之一。否则，校验不通过。
   *
   * @param value 用户输入的值，如从前端传入的某个值
   */
  @Override
  public boolean isValid(Object value, ConstraintValidatorContext cvContext) {
    if (Objects.isNull(value)) {
      return true;
    }
    // 逻辑代码，不符合返回false，否则返回true
    // 切割获取值
    String[] aryValue = {
        HttpMethod.POST.toString().toLowerCase(),
        HttpMethod.DELETE.toString().toLowerCase(),
        HttpMethod.PUT.toString().toLowerCase(),
        HttpMethod.PATCH.toString().toLowerCase(),
        HttpMethod.GET.toString().toLowerCase(),
        HttpMethod.OPTIONS.toString().toLowerCase(),
    };
    for (String s : aryValue) {
      // 存在一致则验证成功
      if (s.equals(value.toString().toLowerCase())) {
        return true;
      }
    }
    return false;
  }

}